8.2 列数据转行方向(列为分层索引转换)
提供了一个列是分层索引的表格,
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.02 列数据转行方向(列为分层索引转换).xlsx" , header =[ 0,1 ], index_col = 0 )
#导入时需指定索引,不然转换后会出现分组
print (df)
df1=df.stack(level=( "年份","半年" )).to_frame().reset_index().rename(columns={0: "数量" })
print (df1)
df2=df1.groupby( "年份" ).agg(
总数量=( "数量","sum" ),
平均=( "数量","mean" )
).reset_index()
print (df2)
返回:
年份 | 2018年 | 2019年 | ||
---|---|---|---|---|
半年 | 上半年 | 下半年 | 上半年 | 下半年 |
姓名 | ||||
张三 | 1101 | 1200 | 915 | 1174 |
李四 | 886 | 1146 | 649 | 905 |
许流子 | 870 | 583 | 776 | 628 |
郭鬼子 | 620 | 947 | 1000 | 529 |
姓名 | 年份 | 半年 | 数量 | |
---|---|---|---|---|
0 | 张三 | 2018年 | 上半年 | 1101 |
1 | 张三 | 2018年 | 下半年 | 1200 |
2 | 张三 | 2019年 | 上半年 | 915 |
3 | 张三 | 2019年 | 下半年 | 1174 |
4 | 李四 | 2018年 | 上半年 | 886 |
5 | 李四 | 2018年 | 下半年 | 1146 |
6 | 李四 | 2019年 | 上半年 | 649 |
7 | 李四 | 2019年 | 下半年 | 905 |
8 | 许流子 | 2018年 | 上半年 | 870 |
9 | 许流子 | 2018年 | 下半年 | 583 |
10 | 许流子 | 2019年 | 上半年 | 776 |
11 | 许流子 | 2019年 | 下半年 | 628 |
12 | 郭鬼子 | 2018年 | 上半年 | 620 |
13 | 郭鬼子 | 2018年 | 下半年 | 947 |
14 | 郭鬼子 | 2019年 | 上半年 | 1000 |
15 | 郭鬼子 | 2019年 | 下半年 | 529 |
年份 | 总数量 | 平均 | |
---|---|---|---|
0 | 2018年 | 7353 | 919.125 |
1 | 2019年 | 6576 | 822.000 |